#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define N 128

int main(int argc, char const *argv[])
{
  char buf[N]={0};
  if (argc != 2)
  {
    fprintf(stderr,"错误：运行程序时去请带入参数(./14-read filename\n)");
    exit(-1);
  }
  int fd;
  fd = open(argv[1],O_RDONLY|O_EXCL);
  if (fd < 0)
  {
    perror("fopen");
    exit(-1);
  }
  
  while (read(fd,buf,N-1) > 0)
  {
    printf("%s",buf);
    memset(buf,0,N);
  }
  close(fd);
/*
    int fp;
    int ch,nbytes;
    char buf[N]={0};
    if (argc != 2)//判断参数的个数必须是2个参数
    {
        printf("运行程序时请代入参数: ./fgetc filename\n");
        exit(-1);
    }
    fp = open(argv[1],O_RDONLY|O_EXCL);
    if (fp == 0)
    {
        perror("open");
        exit(-1);
    }

    //fread 读到文件末尾返回 0
    //fread 没有读到文件末尾，返回度回来的字节数
    //N:表示要读128-1的元素(或者数组“N+1”)
    //1:每一个元素占用1个字节的大小
    //>0:表示没有到大文件末尾
    //=0:表示达到文件末尾
    //nbytes:表示实际读回来的字节数
    while ((nbytes = read(fp,buf,1)) > 0 )
    {
        printf("%s",buf);//把buf 中的内容当成字符串输出，fread 不会自动加上'\0'
        //必须每次清空buf
        memset(buf,0,sizeof(buf));//不这么做程序会有乱码
    }
    
    close(fp);
*/
    return 0;
}
